package sicnu.cs.ich.activity.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import sicnu.cs.ich.api.domain.dto.ActivityDTO;
import sicnu.cs.ich.api.domain.dto.CallDTO;
import sicnu.cs.ich.api.domain.entity.Activities;
import sicnu.cs.ich.api.domain.entity.ActivityImg;
import sicnu.cs.ich.api.domain.entity.ActivityParticipate;

import java.util.List;

/**
 * @author 黎琦
 * @date 2021-12-10 14:55
 */
@Mapper
public interface ActivityMapper extends BaseMapper<Activities> {

    /**
     * 获取所有活动(未结束的：status-1、已结束的：status-0，前端分开展示。。。。
     *
     * @return 活动列表
     */
    List<ActivityDTO> getAllActivity();


    /**
     * 获取所有号召
     *
     * @return 号召列表
     */
    List<CallDTO> getAllCall();

    /**
     * 添加活动参与者/号召响应者
     *
     * @param activityParticipate
     * @return 影响行数
     */
    int insertActivityParticipate(ActivityParticipate activityParticipate);

    /**
     * 添加活动图片
     * @param activityImg
     */
    void insertActivityImg(List<ActivityImg> activityImg);
    /**
     * 更新活动状态
     *
     * @param id
     * @param status
     */
    void updateStatusById(Integer id,Integer status);

    /**
     * 更新活动是否停止报名的状态，isEnd-0：未停止，isEnd-1:停止
     *
     * @param id
     * @param isEnd
     */
    void updateIsEndById(Integer id,Integer isEnd);

    /**
     * 将所有结束的活动的isEnd置为1，已经为1的不管
     * 这里同时改了status=0,已经结束的活动是否有效？这个后期来说
     */
    void updateAllActivityIsEnd();

    /**
     * 将所有结束的号召的status=0
     */
    void updateAllCalStatus();

    /**
     * 将所有号召成功的号召改为待转换状态
     */
    void updateAllIsCallUpon();

    /**
     * 根据活动id更新是否是号召
     *
     * @param id
     * @param isCallUpon
     */
    void updateIsCallUponById(Integer id,Integer isCallUpon);
    /**
     * 更新活动信息
     *
     * @param activities
     */
    void updateInfo(Activities activities);

    /**
     * 根据用户id修改活动或号召的状态
     *
     * @param uid
     * @param oldStatus
     * @param curStatus
     * @param isCallUpon
     * @return
     */
    int updateAllStatus(Integer uid,Integer oldStatus,Integer curStatus,Integer isCallUpon);

    List<Activities> selectByIds(@Param("list") List<Integer> ids);
}
